home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / docs / rakup / match02.doc < prev    next >
Lisp/Scheme  |  1998-10-03  |  18KB  |  605 lines

  1. ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
  2. (MATCH02.DOC)
  3.  é¿ïCèyé▓é¡éτé¡âvâìâOâëâ~âôâOôⁿûσ ö╘èOò╥ üuâGâLâXâpü[âgâVâXâeâÇé╠ì∞ɼüv
  4.                                                                ìLêΣü@É╜ 
  5. ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬ä¬
  6.  
  7. ü¢âåâjâtâBâPü[âVâçâô
  8.  
  9.   â}âbâ`âôâOé═âpâ^ü[âôé╞âfü[â^é≡Å╞ìçé╖éΘéαé╠é┼é╡é╜üBìíôxé═üAâpâ^ü[âôé╞âp
  10.  
  11. â^ü[âôé≡Å╞ìçé╖éΘüuâåâjâtâBâPü[âVâçâô(unification)üv[*2] é≡ì∞é┴é─é▌é▄é╖üB
  12.  
  13. âpâ^ü[âôò╧Éöé╞âpâ^ü[âôò╧Éöé≡Å╞ìçé╖éΘò¬é╛é»üAmatch éµéΦéαÅêù¥é═òíÄGé╔é╚éΦ
  14.  
  15. é▄é╖üBâpâ^ü[âôâ}âbâ`âôâOé╠ë₧ùpé┼é═üAmatch é┼Å\ò¬é╚ÅΩìçéαéáéΦé▄é╖é¬üAé▒é╠
  16.  
  17. îπé┼ì∞ɼé╖éΘ Prolog òùé╠è╚ê╒âGâLâXâpü[âgâVâXâeâÇé┼é═üAâåâjâtâBâPü[âVâçâô
  18.  
  19. é¬òKùvé╔é╚éΦé▄é╖üBè╓Éöû╝é═ unify é╞é╡é▄é╖üBăé╠Ä└ìsùßé≡î⌐é─é¡é╛é│éóüB
  20.  
  21.  
  22.  Lisp > (unify '(æ╛ÿY ìDé½ âRü[âqü[) '(æ╛ÿY ìDé½ X) nil)
  23.  ((X . âRü[âqü[))
  24.  
  25.  Lisp > (unify '(æ╛ÿY ìDé½ âRü[âqü[) '(æ╛ÿY Y âRü[âqü[) nil)
  26.  ((Y . ìDé½))
  27.  
  28.  Lisp > (unify '(ë╘Äq ìDé½ ìgÆâ) '(ë╘Äq X Y) nil)
  29.  ((Y . ìgÆâ) (X . ìDé½))
  30.  
  31.  
  32. match é┼é═æµ 2 ê°Éöé╔âpâ^ü[âôé≡ù^éªéΘé▒é╞é═é┼é½é▄é╣é±é¬üAunify é═âpâ^ü[
  33.  
  34. âôé┼éαé⌐é▄éóé▄é╣é±üBunify é═ match é╞ô»ùlé╔üAɼî≈é╡é╜ÅΩìçé═æ⌐ö¢âèâXâgé≡
  35.  
  36. ò╘é╡üAÄ╕ösé╡é╜ÅΩìçé═ fail é≡ò╘é╡é▄é╖üB
  37.  
  38.   Äƒé═üAâåâjâtâBâPü[âVâçâôé╠ô┴ÆÑôIé╚ùßé≡Īé╡é▄é╡éσéñüB
  39.  
  40.  
  41.  Lisp > (unify '(ë╘Äq X Y) '(ë╘Äq A B) nil)
  42.  ((X . A) (Y . B))
  43.  
  44.  Lisp > (unify '(ë╘Äq X Y) '(ë╘Äq X Y) nil)
  45.  ((X . X) (Y . Y))
  46.  
  47.  
  48. âåâjâtâBâPü[âVâçâôé┼é═üAâpâ^ü[âôò╧Éöé╠Ælé¬âpâ^ü[âôò╧Éöé╔é╚éΘé▒é╞éαéáéΦé▄
  49.  
  50. é╖üBì┼îπé╠ùßé╠éµéñé╔üAÄ⌐ò¬Ä⌐Égé¬Ælé╞é╚éΘÅΩìçéαéáéΦé▄é╖üBé▒é╠éµéñé╚ÅΩìçé┼
  51.  
  52. éαüAâåâjâtâBâPü[âVâçâôé═ɼî≈é╖éΘé╠é┼é╖üB
  53.  
  54.  
  55. note:
  56.  
  57.  [*2] Ä½Åæé≡ê°é¡é╞üAô¥êΩë╗üAÆPêΩë╗é╞éóéñê╙ûíé┼é╖é¬üAé▒éΩé╛é»é┼é═éµé¡éφé⌐
  58.       éΦé▄é╣é±é╦üBé▒é▒é┼é═üAâpâ^ü[âôô»Ämé╠â}âbâ`âôâOé¬âåâjâtâBâPü[âVâçâô
  59.       é╞ìléªé─é¡é╛é│éóüB
  60.  
  61.  
  62.   é╗éΩé┼é═ unify é≡ì∞é┴é─éóé½é▄é╡éσéñüBÅêù¥é═ match é╞é┘é┌ô»é╢é┼é╖é¬üAæµ
  63.  
  64. 2 ê°Éöé╔éαâpâ^ü[âôò╧Éöé¬è▄é▄éΩéΘé╜é▀üAé╗é╠Åêù¥é≡Æ╟ë┴é╖éΘé▒é╞é╔é╚éΦé▄é╖üB
  65.  
  66.  
  67.      List 8 : âåâjâtâBâPü[âVâçâô
  68.  
  69.    1 (defun unify (pattern datum binding)
  70.    2   (cond ((variablep pattern)
  71.    3          (unify-variable pattern datum binding))
  72.    4         ((variablep datum)
  73.    5          (unify-variable datum pattern binding))
  74.    6         ((and (atom pattern) (atom datum))
  75.    7          (unify-atoms pattern datum binding))
  76.    8         ((and (consp pattern) (consp datum))
  77.    9          (unify-pieces pattern datum binding))
  78.   10         (t 'fail)))
  79.  
  80.  
  81.   4 ìsû┌é┼üAdatum é¬âpâ^ü[âôò╧Éöé⌐â`âFâbâNé╖éΘÅêù¥é≡Æ╟ë┴é╡é─éóé▄é╖üBunify-
  82.  
  83. atoms é╞ unify-pieces é═ match é≡ unify é╔Æué½è╖éªé╜é╛é»é┼üAmatch-atoms
  84.  
  85. é╞ match-pieces é╞ô»é╢é┼é╖üB
  86.  
  87.  
  88.      List 9 : âAâgâÇé╞é╠âåâjâtâBâPü[âVâçâô
  89.  
  90.    1 (defun unify-atoms (pattern datum binding)
  91.    2   (if (equal pattern datum) binding 'fail))
  92.  
  93.  
  94.      List 10 : âèâXâgé╠âåâjâtâBâPü[âVâçâô
  95.  
  96.    1 (defun unify-pieces (pattern datum binding)
  97.    2   (let ((result (unify (car pattern) (car datum) binding)))
  98.    3     (if (eq result 'fail)
  99.    4         'fail
  100.    5         (unify (cdr pattern) (cdr datum) result))))
  101.  
  102.  
  103.  
  104.   unify-variable é═ match-variable é╞Åêù¥é¬ê┘é╚éΘë╙Åèé¬éáéΦé▄é╖üBâåâjâtâB
  105.  
  106. âPü[âVâçâôé╠ÅΩìçüAâpâ^ü[âôò╧Éöé╞âpâ^ü[âôò╧Éöé═êΩÆvé╡é▄é╖é¬üAâpâ^ü[âôò╧Éö
  107.  
  108. é╞é╗éΩé╞ô»é╢âpâ^ü[âôò╧Éöé≡è▄é▐âpâ^ü[âôé╞é═êΩÆvé╡é╚éóé⌐éτé┼é╖üBăé╠ùßé≡î⌐
  109.  
  110. é─é¡é╛é│éóüB
  111.  
  112.  
  113.  Lisp > (unify '(æ╛ÿY ìDé½ X) '(æ╛ÿY ìDé½ (âRü[âqü[ âuâëâbâN)) nil)
  114.  ((X âRü[âqü[ âuâëâbâN))
  115.  
  116.  Lisp > (unify '(æ╛ÿY ìDé½ (âRü[âqü[ X))
  117.                '(æ╛ÿY ìDé½ (âRü[âqü[ âuâëâbâN)) nil)
  118.  ((X . âuâëâbâN))
  119.  
  120.  Lisp > (unify '(æ╛ÿY ìDé½ X) '(æ╛ÿY ìDé½ (âRü[âqü[ X)) nil)
  121.  fail
  122.  
  123.  
  124. âRü[âqü[é╠Äφù▐é≡âèâXâgé┼ò\é╖é▒é╞é╔é╡é▄é╡é╜üBì┼Åëé╠ùßé┼é═üAX é═ (âRü[âqü[
  125.  
  126. âuâëâbâN) é╞é╚éΦé▄é╖üB2 ö╘û┌é╠ùßé┼é═üAX é═âuâëâbâNé╞é╚éΦüAâRü[âqü[é╠Äφù▐
  127.  
  128. é≡ïüé▀éΘé▒é╞é¬é┼é½é▄é╖üBé╗éΩé┼é═üAì┼îπé╠ùßé═é╟éñé╚éΘé╠é┼é╡éσéñé⌐üBX é╞
  129.  
  130. (âRü[âqü[ X) é≡Å╞ìçé│é╣éΘé▒é╞é╔é╚éΦé▄é╖üBé▒é╠ÅΩìçüAì┼Åëé╠ X é═æ╛ÿYé¬ìDé½
  131.  
  132. é╚éαé╠é≡ò\é╡é─éóéΘé╠é╔üAăé╠ X é═âRü[âqü[é╠Äφù▐é≡ò\é╖é▒é╞é╔é╚éΦüAû╡Åéé╡
  133.  
  134. é─é╡é▄éóé▄é╖üBé╡é╜é¬é┴é─üAX é╞ (âRü[âqü[ X) é═òsêΩÆvé╞ö╗ÆΦé╡é╚é¡é─é═éóé»
  135.  
  136. é╚éóé╠é┼é╖üB
  137.  
  138.   é╗éΩé┼é═üAunify-variable é≡ì∞éΦé▄é╖üBâpâ^ü[âôò╧Éöé╞Ælé≡æ⌐ö¢âèâXâgé╔Æ╟
  139.  
  140. ë┴é╖éΘÄ₧é╔üAÆlé╠Æåé╔ô»é╢âpâ^ü[âôò╧Éöé¬é╚éóé▒é╞é≡èmöFé╡é▄é╖üBé▒é╠Åêù¥é≡
  141.  
  142. insidep é┼ìséóé▄é╖üB
  143.  
  144.  
  145.      List 11 : âpâ^ü[âôò╧Éöé╞é╠âåâjâtâBâPü[âVâçâô
  146.  
  147.    1 (defun unify-variable (pattern datum binding)
  148.    2   (let ((value (assoc pattern binding)))
  149.    3     (if (and value
  150.    4              (not (eq pattern (cdr value))))
  151.    5         (unify (cdr value) datum binding)
  152.    6         (if (insidep pattern datum binding)
  153.    7             'fail
  154.    8             (add-binding pattern datum binding)))))
  155.  
  156.  
  157.   Ä└é═üAmatch-varibale é╞é╠êßéóé¬éαéñêΩé┬éáéΦé▄é╖üBâåâjâtâBâPü[âVâçâôé╠
  158.  
  159. ÅΩìçüAô»é╢âpâ^ü[âôò╧Éöô»Ämé╠Å╞ìçé═ɼî≈é╖éΘé╠é┼üAæ⌐ö¢âèâXâgé╠Æåé╔é═üAé╜é╞
  160.  
  161. éªé╬ (X . X) é╞éóéñâhâbâgæ╬é¬è▄é▄éΩéΘé▒é╞é¬éáéΦé▄é╖üBé▒é╠é╜é▀üAæ⌐ö¢âèâX
  162.  
  163. âgé⌐éτò╧Éöé╠Ælé≡ÆTé╡üAé╗éΩé≡Ägé┴é─ÆPÅâé╔ unify é≡ì─ïAî─é╤Åoé╡é╖éΘé╞ìóéΘ
  164.  
  165. é▒é╞é¬ïNé▒éΘé╠é┼é╖üBX é╠Ælé═ X é┼é╖é⌐éτüAô»é╢é▒é╞é≡é╕é┴é╞îJéΦò╘é╖é▒é╞é╔
  166.  
  167. é╚éΦé▄é╖üBé┬é▄éΦüAì─ïAî─é╤Åoé╡é¬ÆΓÄ~é╣é╕é╔üALisp âCâôâ^âvâèâ^é╠Ä└ìsé¬ÆΓ
  168.  
  169. Ä~é╡é▄é╖üBé▒éΩé≡ë±ö≡é╖éΘé╜é▀é╔üA4 ìsû┌é┼âpâ^ü[âôò╧Éöé╞é╗é╠Ælé¬ê┘é╚éΘé▒é╞
  170.  
  171. é≡èmöFé╡é─éóé▄é╖üB
  172.  
  173.   6 ìsû┌é┼üAæ⌐ö¢âèâXâgé╔âpâ^ü[âôò╧Éöé╞Ælé≡Æ╟ë┴é╖éΘæOé╔üAinsidep é≡î─é╤Åo
  174.  
  175. é╡é─üAô»é╢âpâ^ü[âôò╧Éöé¬Ælé╠Æåé┼ÄgéφéΩé─éóé╚éóé⌐â`âFâbâNé╡é▄é╖üBé╗éΩé┼é═üA
  176.  
  177. insidep é≡ì∞éΦé▄é╡éσéñüB
  178.  
  179.  
  180.      List 12 : datum é╠Æåé╔ var(âpâ^ü[âôò╧Éö)é¬éáéΘé⌐
  181.  
  182.    1 (defun insidep (var datum binding)
  183.    2   (if (eq var datum)
  184.    3       nil
  185.    4       (inside-sub-p var datum binding)))
  186.  
  187.  
  188.   Ä└ì█é╠Åêù¥é═ inside-sub-p é┼ìséóé▄é╖üBâåâjâtâBâPü[âVâçâôé═ô»é╢âpâ^ü[âô
  189.  
  190. ò╧Éöô»Ämé╠Å╞ìçé┼éáéΩé╬ɼî≈é╡é▄é╖üB2 ìsû┌é╠ if é┼üAvar é╞ datum é¬ô»é╢âp
  191.  
  192. â^ü[âôò╧Éöé⌐â`âFâbâNé╡é─éóé▄é╖üB
  193.  
  194.  
  195.      List 13 : insidep û{æ╠
  196.  
  197.    1 (defun inside-sub-p (var datum binding)
  198.    2   (cond ((equal var datum) t)
  199.    3         ((atom datum) nil)
  200.    4         ((variablep datum)
  201.    5          (let ((value (assoc datum binding)))
  202.    6            (if value
  203.    7                (inside-sub-p var (cdr value) binding))))
  204.    8         (t
  205.    9          (or (inside-sub-p var (car datum) binding)
  206.   10              (inside-sub-p var (cdr datum) binding)))))
  207.  
  208.  
  209.   inside-sub-p é═âèâXâgé≡ car é╞ cdr é┼ò¬ë≡é╡é╚é¬éτüAâpâ^ü[âôò╧Éö var é≡
  210.  
  211. â`âFâbâNé╡é─éóé½é▄é╖üB2 ìsû┌é┼üAvar é╞ datum é¬ôÖé╡éóé╠é┼éáéΩé╬üAâfü[â^
  212.  
  213. é╠Æåé╔ô»é╢âpâ^ü[âôò╧Éöé≡î⌐é┬é»é╜é╠é┼ t é≡ò╘é╡é▄é╖üB3 ìsû┌é┼üAdatum é¬âA
  214.  
  215. âgâÇé┼éáéΩé╬üAé▒éΩê╚Åπò¬ë≡é┼é½é╚éóé╠é┼ nilé≡ò╘é╡é▄é╖üB4 ìsû┌é┼üAdatum é¬
  216.  
  217. âpâ^ü[âôò╧Éöé╠ÅΩìçüAé╗é╠Ælé╔ var é¬è▄é▄éΩé─éóéΘé⌐â`âFâbâNé╡é▄é╖üB5 ìsû┌
  218.  
  219. é┼üAæ⌐ö¢âèâXâgé⌐éτ datum é≡ÆTì⌡é╡é▄é╖üBÆlé¬î⌐é┬é⌐éΩé╬ inside-sub-p é≡ì─
  220.  
  221. ïAî─é╤Åoé╡é╡é▄é╖üBé╗éñé┼é╚é»éΩé╬ nil é≡ò╘é╡é▄é╖üB
  222.  
  223.   é╗éΩê╚èOé╠ÅΩìçé═üAdatum é═âèâXâgé╚é╠é┼üAcar é╞ cdr é┼âèâXâgé≡ò¬ë≡é╡é─üA
  224.  
  225. inside-sub-p é≡ì─ïAî─é╤Åoé╡é╡é▄é╖üBò╧Éö var é¬î⌐é┬é⌐é┴é╜éτÆTì⌡é≡ÆåÆfé╡é─
  226.  
  227. t é≡ò╘é╣é╬éóéóé╠é┼üAor é≡Ägé┴é─éóéΘé▒é╞é╔Æìê╙é╡é─é¡é╛é│éóüBé┬é▄éΦ CAR òö
  228.  
  229. é≡Æ▓é╫é─é╜îïë╩鬠t é╚éτé╬üAor é═ t é≡ò╘é╡é▄é╖é╡üAnil é┼éáéΩé╬ăé╠ CDR òö
  230.  
  231. é╠ÆTì⌡é¬ìséφéΩé▄é╖üB
  232.  
  233.   é▒éΩé┼âvâìâOâëâÇé═è«É¼é┼é╖üBâvâìâOâëâÇé═ match é╞ô»é╢é¡üAMATCH.VL é╔èi
  234.  
  235. ö[é│éΩé─éóé▄é╖üBÄ└ì█é╔ô«ì∞é≡èmöFé╡é─é▌é─é¡é╛é│éóüB
  236.  
  237.  
  238.  
  239. ü¢éαéñêΩé┬é╠ò╧Éöè╟ù¥ò√û@
  240.  
  241.   æ⌐ö¢âèâXâgé╔éµéΘè╟ù¥ò√û@é═üAâèâXâgÅêù¥é¬ô╛ê╙é╚ Lisp é┼éµé¡ÄgéφéΩéΘÄΦû@
  242.  
  243. é┼é╖é¬üAé▒é▒é┼ò╩é╠ò√û@é≡Å╨ëεé╡é▄é╡éσéñüBé╗éΩé═üAâpâ^ü[âôò╧Éöé≡ò\é╖âVâôâ{
  244.  
  245. âïé╔Ælé≡èiö[é╖éΘò√û@é┼é╖üBLisp é╠âVâôâ{âïé═Ælé≡èiö[é┼é½é▄é╖é¬üAé╗é╠ï@ö\
  246.  
  247. é═ï╟Åèò╧ÉöüiâîâLâVâJâïò╧Éöüjé╞æσêµò╧ÉöüiâXâyâVâââïò╧Éöüjé╔ò¬é⌐éΩé▄é╖üBìí
  248.  
  249. ë±é╠ò√û@é┼é═üAâVâôâ{âïé≡âXâyâVâââïò╧Éöé╞é╡é─Ägùpé╡é▄é╖üB
  250.  
  251.  
  252.   Lisp é╔é═üAâXâyâVâââïò╧Éöé╠Ælé≡æÇì∞é╖éΘè╓Éöé¬ùpê╙é│éΩé─éóé▄é╖üB
  253.  
  254.  
  255.                          äíäƒäƒâVâôâ{âïäƒäƒäó   set
  256.             boundp ü⌐äƒäƒäá âXâyâVâââïò╧Éö äáü⌐äƒäƒäƒ data
  257.          (æ⌐ö¢â`âFâbâN)  äñäƒäƒäƒäƒäƒäƒäƒäƒäú         ü¬
  258.                                ü¬   äá  symbol-value  äá
  259.                                äá   äñäƒäƒäƒäƒäƒäƒäƒäƒäú
  260.                                äá
  261.                            makunbound (ûóæ⌐ö¢é╔é╖éΘ)
  262.  
  263.                      É} 5 : âXâyâVâââïò╧Éöé╠æÇì∞è╓Éö
  264.  
  265.  
  266.   âXâyâVâââïò╧Éöé╔é═üAÆlé¬âZâbâgé│éΩé─éóé╚éóÅΩìçé¬éáéΦé▄é╖üBé▒é╠Ä₧üAò╧Éö
  267.  
  268. é╔âAâNâZâXé╖éΘé╞âGâëü[é¬ö¡É╢é╡é▄é╖üBâVâôâ{âïé¬âXâyâVâââïò╧Éöé╠Ælé≡Ä¥é┴é─
  269.  
  270. éóéΘé⌐üAé┬é▄éΦæ⌐ö¢é│éΩé─éóéΘé⌐â`âFâbâNé╖éΘè╓Éö鬠boundp é┼é╖üBâXâyâVâââï
  271.  
  272. ò╧Éöé╠Ælé≡Ä¥é╜é╚éóéµéñé╔é╖éΘüAé┬é▄éΦûóæ⌐ö¢Å≤æ╘é╔é╖éΘè╓Éö鬠makunbound é┼
  273.  
  274. é╖üBÆlé≡âZâbâgé╖éΘè╓Éö鬠set é┼üAÆlé≡ĵéΦÅoé╖è╓Éö鬠symbol-value é┼é╖üB
  275.  
  276. é┼é═üAÅ┌é╡é¡Éαû╛é╡é▄é╡éσéñüB
  277.  
  278.  
  279.         boundp symbol
  280.  
  281.         makunbound symbol
  282.  
  283.  
  284.   boundp é═ symbol é╠âXâyâVâââïò╧Éöé¬Ælé≡Ä¥é┴é─éóéΩé╬ t é≡ò╘é╡üAé╗éñé┼é╚
  285.  
  286. é»éΩé╬ nil é≡ò╘é╡é▄é╖üBmkunbound é═ symbol é╠âXâyâVâââïò╧Éöé≡ûóæ⌐ö¢é╔é╡
  287.  
  288. é▄é╖üBâXâyâVâââïò╧Éöé═Ælé≡Ä¥é╜é╚é¡é╚éΘé╠é┼üAò╧Éöé≡ò]ë┐é╖éΘé╞âGâëü[é╔é╚éΦ
  289.  
  290. é▄é╖üBmkunbound é═ûóæ⌐ö¢é╔é╡é╜âVâôâ{âïé≡ò╘é╡é▄é╖üB
  291.  
  292.   è╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
  293.  
  294.  
  295.  Lisp > (boundp 'a)
  296.  nil
  297.  
  298.  Lisp > (setq a 10)
  299.  10
  300.  
  301.  Lisp > (boundp 'a)
  302.  t
  303.  
  304.  Lisp > (makunbound 'a)
  305.  a
  306.  
  307.  Lisp > (boundp 'a)
  308.  nil
  309.  
  310.  
  311.   âVâôâ{âï a é═Ælé¬âZâbâgé│éΩé─éóé▄é╣é±üBé▒é▒é┼ setq é┼ a é╔ 10 é≡âZâbâg
  312.  
  313. é╡é▄é╖üBa é═âîâLâVâJâïò╧Éöé┼é═é╚éóé╠é┼üAâXâyâVâââïò╧Éöé╔Ælé¬âZâbâgé│éΩé▄
  314.  
  315. é╖üBé╡é╜é¬é┴é─üAboundp é┼Æ▓é╫éΘé╞ t é≡ò╘é╡é▄é╖üBmakubound é┼ a é≡ûóæ⌐ö¢
  316.  
  317. Å≤æ╘é╔é╖éΘé╞üAboundp é═ nil é≡ò╘é╡é▄é╖üB
  318.  
  319.  
  320.         set symbol value
  321.  
  322.         symbol-value symbol
  323.  
  324.  
  325.   set é═ symbol é╠âXâyâVâââïò╧Éöé╠Ælé≡ value é╔ò╧ìXé╡é▄é╖üBset é═è╓Éöé╚
  326.  
  327. é╠é┼ symbol é═ò]ë┐é│éΩé▄é╖üBò]ë┐îïë╩é¬âVâôâ{âïé┼é╚é»éΩé╬âGâëü[é╞é╚éΦé▄é╖üB
  328.  
  329. set é═âîâLâVâJâïò╧Éöé╠Ælé≡ò╧ìXé┼é½é▄é╣é±üBset é═ value é≡ò╘é╡é▄é╖üB
  330.  
  331.   symbol-value é═ symbol é╠âXâyâVâââïò╧Éöé╠Ælé≡ĵéΦÅoé╡é▄é╖üBset é╞ô»é╢
  332.  
  333. é¡üAâîâLâVâJâïò╧Éöé╔é═âAâNâZâXé┼é½é▄é╣é±üBè╚ÆPé╚Ägùpùßé≡Īé╡é▄é╡éσéñüB
  334.  
  335.  
  336.  Lisp > (set 'a 10)
  337.  10
  338.  
  339.  Lisp > (let ((a 100))
  340.           (print (symbol-value 'a))
  341.           (set 'a 20)
  342.           (print a))
  343.  10
  344.  100
  345.  
  346.  Lisp > a
  347.  20
  348.  
  349.  
  350.   é▄é╕ set é┼âVâôâ{âï a é╠âXâyâVâââïò╧Éöé╔ 10 é≡âZâbâgé╡é▄é╖üBăé╔üAlet
  351.  
  352. é┼âîâLâVâJâïò╧Éö a é≡ 100 é╔É▌ÆΦé╡é▄é╖üBsymbol-value é┼ a é╠Ælé≡ĵéΦÅoé╖
  353.  
  354. é╞üAâXâyâVâââïò╧Éöé╠Æl 10 é╞é╚éΦé▄é╖üBăé╔üAset é┼ a é╠Ælé≡ 20 é╔ò╧ìXé╡
  355.  
  356. é▄é╖üBé▒é╠ÅΩìçüAâXâyâVâââïò╧Éöé╠Ælé≡ò╧ìXé╖éΘé╠é┼üAa é╠Ælé≡ print é╡é─éα
  357.  
  358. 100 é╠é▄é▄é┼é╖üBlet é╠Ä└ìsîπüAa é≡ò\Īé╖éΘé╞ 20 é╔ò╧ìXé│éΩé─éóé▄é╖üB
  359.  
  360.  
  361.   âpâ^ü[âôâ}âbâ`âôâOé╠ò╧Éöè╟ù¥é╔âXâyâVâââïò╧Éöé≡ÄgéñÅΩìçüAæ⌐ö¢üEûóæ⌐ö¢é╠
  362.  
  363. Å≤æ╘é≡üAé╗é╠é▄é▄âpâ^ü[âôò╧Éöé╔ôûé─é═é▀éΘé▒é╞é¬é┼é½éΘé╠é┼ò╓ùÿé╚é╠é┼é╖üBé╜
  364.  
  365. é╛é╡üAâXâyâVâââïò╧Éöé╠Ælé≡ò╧ìXé╖éΘé╞üAé╗é╠ëeï┐é═é╕é┴é╞ÄcéΘé╠é┼üAâpâ^ü[âô
  366.  
  367. â}âbâ`âôâOÅIù╣îπé═üAûóæ⌐ö¢Å≤æ╘é╔û▀é╡é─é¿é¡òKùvé¬éáéΦé▄é╖üBé╡é╜é¬é┴é─üAÿA
  368.  
  369. æzâèâXâgé╠ÅΩìçé╞ô»é╢éµéñé╔üAâåâjâtâBâPü[âVâçâôé¬É¼î≈é╡é╜Ä₧é═üAæ⌐ö¢é╡é╜ò╧
  370.  
  371. Éöé╠âèâXâgé≡ò╘é╡üAÄ╕ösé╡é╜Ä₧é═ fail é≡ò╘é╖é▒é╞é╔é╡é▄é╖üB
  372.  
  373.  
  374.   é╗éΩé┼é═üAâXâyâVâââïò╧Éöé≡Ägé┴é╜è╟ù¥ò√û@é┼âåâjâtâBâPü[âVâçâôé≡Ä└î╗é╡é─
  375.  
  376. é▌é▄é╡éσéñüBé▄é╕üAâpâ^ü[âôò╧Éöé≡æ⌐ö¢é╖éΘ add-binding é⌐éτÅCÉ│é╡é▄é╖üB
  377.  
  378.  
  379.      List 14 : ò╧ÉöÆlé≡âZâbâgé╖éΘ
  380.  
  381.    1 (defun add-binding (var datum binding)
  382.    2   (set var datum)
  383.    3   (cons var binding))
  384.  
  385.  
  386.   Ælé╠âZâbâgé═ set é≡Ägéªé╬è╚ÆPé┼é╖üBset é═è╓Éöé╚é╠é┼ê°Éöé═ò]ë┐é│éΩéΘé▒
  387.  
  388. é╞é╔Æìê╙é╡é─é¡é╛é│éóüBvar é╔âZâbâgé│éΩé─éóéΘâVâôâ{âïé╠âXâyâVâââïò╧Éöé╔
  389.  
  390. datum é╠Ælé¬âZâbâgé│éΩé▄é╖üBì┼îπé╔ binding é╔ò╧Éö var é≡Æ╟ë┴é╡é▄é╖üB
  391.  
  392.   Äƒé═üAæ⌐ö¢é│éΩé╜ò╧Éöé≡âNâèâAé╖éΘè╓Éö clear-binding é≡ì∞éΦé▄é╖üB
  393.  
  394.  
  395.      List 15 : ò╧Éöé≡âNâèâAé╡é─ 'fail é≡ò╘é╖
  396.  
  397.    1 (defun clear-binding (binding)
  398.    2   (if (consp binding)
  399.    3     (map nil #'makunbound binding))
  400.    4   'fail)
  401.  
  402.  
  403.   binding é¬âèâXâgé┼éáéΩé╬üAé╗é▒é╔èiö[é│éΩé─éóéΘò╧Éöé≡ makunbound é┼ûóæ⌐
  404.  
  405. ö¢é╔é╡é▄é╖üBù±è╓Éö map é≡Ägé┴é─üAèeùvæfé╔ makunbound é≡ôKùpé╡é─éóé▄é╖üB
  406.  
  407. ì┼îπé╔ fail é≡ò╘é╡é▄é╖üB
  408.  
  409.  
  410.   é╗éΩé┼é═üAâåâjâtâBâPü[âVâçâôé≡ÅCÉ│é╡é▄é╡éσéñüBòsêΩÆvé╞ö╗ÆΦé╖éΘÅêù¥é┼üA
  411.  
  412. ìíé▄é┼æ⌐ö¢é│éΩé╜âpâ^ü[âôò╧Éöé≡ûóæ⌐ö¢é╔é╖éΘé╜é▀üAclear-binding é≡î─é╤Åoé╖
  413.  
  414. éµéñé╔é╡é▄é╖üBì┼Åëé═ unify é┼é╖üB
  415.  
  416.  
  417.      List 16 : âåâjâtâBâPü[âVâçâô
  418.  
  419.    1 (defun unify (pattern datum binding)
  420.    2   (cond ((variablep pattern)
  421.    3          (unify-variable pattern datum binding))
  422.    4         ((variablep datum)
  423.    5          (unify-variable datum pattern binding))
  424.    6         ((and (atom pattern) (atom datum))
  425.    7          (unify-atoms pattern datum binding))
  426.    8         ((and (consp pattern) (consp datum))
  427.    9          (unify-pieces pattern datum binding))
  428.   10         (t (clear-binding binding))))
  429.  
  430.  
  431.   ì┼îπé╠É▀é┼ fail é≡ò╘é╖é╠é┼é╖é¬üAclear-binding é≡î─é╤Åoé╡é─ò╧Éöæ⌐ö¢é≡âN
  432.  
  433. âèâAé╡é▄é╖üB
  434.  
  435.  
  436.      List 17 : âAâgâÇé╞é╠âåâjâtâBâPü[âVâçâô
  437.  
  438.    1 (defun unify-atoms (pattern datum binding)
  439.    2   (if (equal pattern datum)
  440.    3       binding
  441.    4       (clear-binding binding)))
  442.  
  443.  
  444.   unify-atoms é═ pattern é╞ datum é¬ôÖé╡é¡é╚éóÅΩìçüAclear-binding é≡î─é╤
  445.  
  446. Åoé╡üAò╧Éöé≡ûóæ⌐ö¢é╔é╡é─é⌐éτ fail é≡ò╘é╡é▄é╖üB
  447.  
  448.   âèâXâgé╠âåâjâtâBâPü[âVâçâô unify-pieces é═üAÅCÉ│é╠òKùvé═éáéΦé▄é╣é±üB
  449.  
  450.   Äƒé═ unify-variable é≡ò╧ìXé╡é▄é╖üB
  451.  
  452.  
  453.      List 18 : âpâ^ü[âôò╧Éöé╞é╠âåâjâtâBâPü[âVâçâô
  454.  
  455.    1 (defun unify-variable (var datum binding)
  456.    2   (if (and (boundp var)
  457.    3            (not (eq (symbol-value var) var)))
  458.    4       (unify (symbol-value var) datum binding)
  459.    5       (if (insidep var datum binding)
  460.    6           (clear-binding binding)
  461.    7           (add-binding var datum binding))))
  462.  
  463.  
  464.   unify-varibale é═âpâ^ü[âôò╧Éöé╠Ælé≡ïüé▀éΘÅêù¥é≡ÅCÉ│é╡é▄é╖üBé▄é╕ boundp
  465.  
  466. é┼âXâyâVâââïò╧Éöé╔Ælé¬âZâbâgé│éΩé─éóéΘé▒é╞é≡èmöFé╡é▄é╖üBăé╔üAé╗é╠Ælé¬Ä⌐
  467.  
  468. ò¬Ä⌐Égé┼é╚éóé▒é╞é≡èmöFé╡é▄é╖üBé╜é╞éªé╬üAX é╞ X é≡Å╞ìçé╖éΘé╞Ä⌐ò¬Ä⌐Égé¬Æl
  469.  
  470. é╞é╚éΘé╜é▀üAé▒é╠â`âFâbâNé≡Å╚é¡é╞É│Åφé╔ô«ì∞é╡é▄é╣é±üBò╧Éöé¬æ⌐ö¢é│éΩé─éóéΩ
  471.  
  472. é╬üAÆlé≡ĵéΦÅoé╡é─ì─ôx unify é≡î─é╤Åoé╡é▄é╖üBûóæ⌐ö¢é╠ÅΩìçé═üAò╧Éö var é¬
  473.  
  474. datum ôαé┼ÄgéφéΩé─éóé╚éóé▒é╞é≡èmöFé╡é▄é╖üBÄgéφéΩé─éóéΩé╬üAclear-binding
  475.  
  476. é┼æ⌐ö¢é≡âNâèâAé╡é─ failé≡ò╘é╡é▄é╖üB
  477.  
  478.   insidep é═é╗é╠é▄é▄é┼éóéóé╠é┼é╖é¬üAinside-sub-p é≡ÅCÉ│é╡é▄é╖üB
  479.  
  480.  
  481.      List 19 : datum é╠Æåé╔ var(ò╧Éö)é¬éáéΘé⌐
  482.  
  483.    1 (defun inside-sub-p (var datum binding)
  484.    2   (cond ((equal var datum) t)
  485.    3         ((atom datum) nil)
  486.    4         ((variablep datum)
  487.    5          (if (and (boundp datum)
  488.    6                   (not (eq (symbol-value datum) datum)))
  489.    7              (inside-sub-p var (symbol-value datum) binding)))
  490.    8         (t
  491.    9          (or (inside-sub-p var (car datum) binding)
  492.   10              (inside-sub-p var (cdr datum) binding)))))
  493.   11
  494.  
  495.  
  496.   4 ìsû┌é╠ datum é¬âpâ^ü[âôò╧Éöé╠ÅΩìçüAÆlé≡ĵéΦÅoé╖Åêù¥é≡ò╧ìXé╡é▄é╖üBò╧
  497.  
  498. Éö datum é¬æ⌐ö¢é│éΩé─éóé─üAé╗é╠Ælé¬Ä⌐ò¬Ä⌐Égé┼é╚éóé▒é╞é≡èmöFé╡é▄é╖üB
  499.  
  500.  
  501.   é▒éΩé┼ÅCÉ│é═ÅIéφéΦé▄é╡é╜é¬üAé▒é╠é▄é▄é╛é╞ unify é═ò╧ÉöâèâXâgé≡ò╘é╖é╛é»
  502.  
  503. é┼üAé╗é╠Ælé≡î⌐éΘé▒é╞é¬é┼é½é▄é╣é±üBé╗é▒é┼üAâpâ^ü[âôò╧Éöé⌐éτÆlé≡ïüé▀éΘè╓Éö
  504.  
  505. é≡ì∞éΦé▄é╖üB
  506.  
  507.  
  508.      List 20 : âpâ^ü[âôò╧Éöé╠Ælé≡ïüé▀éΘ
  509.  
  510.    1 (defun variable-value (var)
  511.    2   (let (value)
  512.    3     (loop
  513.    4       (unless (boundp var) (return var))
  514.    5       (setq value (symbol-value var))
  515.    6       (cond
  516.    7         ((eq var value)
  517.    8          (return value))
  518.    9         ((variablep value)
  519.   10          (setq var value))
  520.   11         ((consp value)
  521.   12          (return (replace-variable value)))
  522.   13         (t (return value))))))
  523.  
  524.  
  525.   variable-value é═ò╧Éöé╠âèâôâPü[âWé≡é╜é╟é┴é─Ælé≡ïüé▀é▄é╖üBé▒é╠Åêù¥é═ì─
  526.  
  527. ïAÆΦï`é≡Ägéφé╚é¡é─éαüAîJéΦò╘é╡é┼Ä└î╗é┼é½é▄é╖üBé▄é╕ 4 ìsû┌é┼üAò╧Éö var é¬
  528.  
  529. Ä⌐ùRò╧Éöé┼éáéΩé╬üAé╗é╠ò╧Éöé≡é╗é╠é▄é▄ò╘é╡é▄é╖üBâåâjâtâBâPü[âVâçâôé═âpâ^ü[
  530.  
  531. âôò╧Éöô»Ämé╠Å╞ìçé¬ë┬ö\é╚é╠é┼üAéáéΘò╧Éöé¬ûóæ⌐ö¢é╠é▄é▄é╞éóéñé▒é╞éαéáéΘé╠é┼
  532.  
  533. é╖üB5 ìsû┌é┼üAvar é╠Ælé≡ symbol-value é┼ĵéΦÅoé╡ value é╔âZâbâgé╡é▄é╖üB
  534.  
  535.   6 ìsû┌é⌐éτé╠ cond é┼üAÆl value é≡â`âFâbâNé╡é▄é╖üBéαé╡üAvar é╞ value é¬
  536.  
  537. ô»é╢âVâôâ{âïé┼éáéΩé╬üAÄ⌐ò¬Ä⌐Égé¬Ælé╞é╡é─èiö[é│éΩé─éóé▄é╖üBé▒é╠ÅΩìçé═üAé╗
  538.  
  539. é╠âVâôâ{âïé≡ return é┼ò╘é╡é▄é╖üBăé╔ value é¬âpâ^ü[âôò╧Éöé╠ÅΩìçé═üAvalue
  540.  
  541. é≡ var é╔âZâbâgé╡é─îJéΦò╘é╡é≡æ▒ìsé╡é▄é╖üBé▒éΩé┼üAò╧Éöè╘é╠âèâôâPü[âWé≡é╨
  542.  
  543. é╞é┬é╜é╟é┴é╜é▒é╞é╔é╚éΦé▄é╖üB
  544.  
  545.   11 ìsû┌é┼üAvalue é¬âèâXâgé╠ÅΩìçé═üAé╗é╠Æåé╔éáéΘò╧Éöé≡Æuè╖é╖éΘé╜é▀üA
  546.  
  547. replace-variable é≡î─é╤Åoé╡üAé╗é╠îïë╩é≡ return é┼ò╘é╡é▄é╖üBì┼îπé╠ t É▀é┼
  548.  
  549. é═üAvalue é≡é╗é╠é▄é▄ return é┼ò╘é╖é╛é»é┼é╖üB
  550.  
  551.   Äƒé═üAâèâXâgôαé╠âpâ^ü[âôò╧Éöé≡é╗é╠Ælé┼Æuè╖é╖éΘ replace-variable é┼é╖üB
  552.  
  553.  
  554.      List 21 : âpâ^ü[âôò╧Éöé≡Æuè╖é╖éΘ
  555.  
  556.    1 (defun replace-variable (pattern)
  557.    2   (cond
  558.    3     ((variablep pattern)
  559.    4      (variable-value pattern))
  560.    5     ((atom pattern) pattern)
  561.    6     (t
  562.    7      (cons (replace-variable (car pattern))
  563.    8            (replace-variable (cdr pattern))))))
  564.  
  565.  
  566.   ì─ïAé≡Ägéªé╬è╚ÆPé╔ì∞éΩé▄é╖üB6 ìsû┌é┼üAâèâXâg é≡ car é╞ cdr é┼ò¬ë≡é╡üA
  567.  
  568. repalce-varibale é≡ì─ïAî─é╤Åoé╡é╡é▄é╖üBé╗é╡é─üAé╗é╠ò╘éΦÆlé≡ cons é┼ægé▌
  569.  
  570. ùºé─éΩé╬éµéóéφé»é┼é╖üB
  571.  
  572.   ì─ïAî─é╤Åoé╡é╠ÆΓÄ~Å≡îÅé═ pattern é¬ atom é╠ÅΩìçé┼é╖é¬üAé╗é╠æOé╔ pattern
  573.  
  574. é¬âpâ^ü[âôò╧Éöé⌐â`âFâbâNé╡é▄é╖üBé╗é╠ÅΩìçé═ variable-value é┼Ælé≡ïüé▀üAé╗
  575.  
  576. é╠îïë╩é≡ò╘é╖éµéñé╔é╡é▄é╖üBé▒éΩé┼üAò╧Éöé≡é╗é╠Ælé╔Æué½è╖éªéΘé▒é╞é¬é┼é½é▄é╖üB
  577.  
  578.  
  579.   é▒éΩé┼âvâìâOâëâÇé═è«É¼é┼é╖üBìíë±ì∞ɼé╖éΘè╚ê╒âGâLâXâpü[âgâVâXâeâÇé┼é═üA
  580.  
  581. é╟é┐éτé╠âåâjâtâBâPü[âVâçâôé≡Ägé┴é─éαéµéóé╠é┼é╖é¬üAâpâ^ü[âôò╧Éöé╞âpâ^ü[âô
  582.  
  583. ò╧Éöé¬òíÄGé╔âèâôâNé╖éΘÅ≤ï╡üAé┬é▄éΦüAéáéΘò╧Éöé╠Ælé≡ïüé▀éΘé╠é╔òíÉöî┬é╠ò╧Éö
  584.  
  585. é≡é╜é╟éτé╚é»éΩé╬éóé»é╚éóÅΩìçé┼é═üAâXâyâVâââïò╧Éöé≡Ägé┴é╜è╟ù¥ò√û@é¬æ¼ôxôI
  586.  
  587. é╔ùDéΩé─éóé▄é╖üBé╚é║é⌐é╞éóéñé╞üAæ⌐ö¢âèâXâgé≡Ägéñé╞üAò╧Éöé╠Ælé≡ïüé▀éΘôxé╔üA
  588.  
  589. ÿAæzâèâXâgé╠ɵô¬é⌐éτÉⁿî`ÆTì⌡é╡é╚é»éΩé╬é╚éτé╚éóé⌐éτé┼é╖üBé▄é╜üAòíÉöî┬é╠ò╧
  590.  
  591. Éöé≡é╜é╟éΘé╞éóéñé▒é╞é═üAÿAæzâèâXâgé╔èiö[é│éΩé╜ùvæfÉöéαæ╜é¡é╚éΦüAöΣèrë±Éö
  592.  
  593. éαé╗éΩé╛é»æ¥éªéΘé▒é╞é╔é╚éΘé╠é┼é╖üBìíë±ì∞éΘâGâLâXâpü[âgâVâXâeâÇé┼é═üAâpâ^ü[
  594.  
  595. âôò╧Éöô»Ämé╠Å╞ìçé═òpö╔é╔ïNé▒éΘé╠é┼üAâåâjâtâBâPü[âVâçâôé═âXâyâVâââïò╧Éöé≡
  596.  
  597. Ägé┴é╜è╟ù¥ò√û@é┼Ä└î╗é╖éΘé▒é╞é╔é╡é▄é╡éσéñüB
  598.  
  599.   âvâìâOâëâÇé═âtâ@âCâï UNIFY.VL é╔èiö[é│éΩé─éóé▄é╖üBÄ└ì█é╔ô«ì∞é≡èmöFé╡é─
  600.  
  601. é▌é─é¡é╛é│éóüB
  602.  
  603.  
  604. üiédénéeüj
  605.